home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1999 July: Technology Seed / ADC Seed CD - July 1999.toast / Carbon SDK 1.0d10c3 / Sample Code / AppearanceSample / AppearanceHelpers.c next >
Encoding:
C/C++ Source or Header  |  1999-05-01  |  23.0 KB  |  835 lines  |  [TEXT/CWIE]

  1. /*
  2.     File:        AppearanceHelpers.c
  3.  
  4.     Contains:    Helper routines which wrap around Set/GetControlData.
  5.  
  6.     Version:    Appearance 1.0 SDK
  7.  
  8.     Copyright:    © 1997 by Apple Computer, Inc., all rights reserved.
  9.  
  10.     File Ownership:
  11.  
  12.         DRI:                Edward Voas
  13.  
  14.         Other Contact:        7 of 9, Borg Collective
  15.  
  16.         Technology:            OS Technologies Group
  17.  
  18.     Writers:
  19.  
  20.         (edv)    Ed Voas
  21.  
  22.     Change History (most recent first):
  23.  
  24.          <2>     9/11/97    edv        Fix header
  25.          <1>     9/11/97    edv        First checked in.
  26. */
  27.  
  28. #include "AppearanceSamplePrefix.h"
  29.  
  30. #include <Appearance.h>
  31. #include <Resources.h>
  32. #include "AppearanceHelpers.h"
  33. #include "Assertions.h"
  34.  
  35. // Noone likes a mess. Here's some macros to help out.
  36.  
  37. #define ASSERT_ALIGNMENT( align )    \
  38.     ASSERT( ((align) == kControlBevelButtonAlignCenter) || ((align) == kControlBevelButtonAlignTop)    \
  39.             || ((align) == kControlBevelButtonAlignBottom) || ((align) == kControlBevelButtonAlignLeft)    \
  40.             || ((align) == kControlBevelButtonAlignRight) || ((align) == kControlBevelButtonAlignTopLeft) \
  41.             || ((align) == kControlBevelButtonAlignTopRight) || ((align) == kControlBevelButtonAlignBottomLeft) \
  42.             || ((align) == kControlBevelButtonAlignBottomRight) || ((align) == kControlBevelButtonAlignSysDirection) )
  43.  
  44. #define ASSERT_TEXT_ALIGNMENT( align )    \
  45.     ASSERT( ((align) == kControlBevelButtonAlignTextSysDirection) || ((align) == kControlBevelButtonAlignTextCenter)    \
  46.             || ((align) == kControlBevelButtonAlignTextFlushRight) || ((align) == kControlBevelButtonAlignTextFlushLeft) )
  47.  
  48. #define ASSERT_TEXT_PLACEMENT( align )    \
  49.     ASSERT( ((align) == kControlBevelButtonPlaceSysDirection) || ((align) == kControlBevelButtonPlaceToRightOfGraphic)    \
  50.             || ((align) == kControlBevelButtonPlaceToLeftOfGraphic) || ((align) == kControlBevelButtonPlaceBelowGraphic) \
  51.             || ((align) == kControlBevelButtonPlaceAboveGraphic) || ((align) == kControlBevelButtonPlaceNormally ) )
  52.  
  53.  
  54. #define MIN( a, b )        ( ( (a) < (b) ) ? (a) : (b) )
  55.  
  56. //ããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  57. //    Ä GetEditTextText
  58. //ããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  59. //    Returns the text from an edit text control.
  60. //
  61. pascal OSStatus
  62. GetEditTextText( ControlHandle control, StringPtr text )
  63. {
  64.     Size        actualSize;
  65.     OSStatus    err;
  66.     
  67.     if ( control == nil )
  68.         return paramErr;
  69.         
  70.     if ( text == nil )
  71.         return paramErr;
  72.         
  73.     err = GetControlData( control, 0, kControlEditTextTextTag, 255, (Ptr)(text + 1), &actualSize );
  74.     if ( err == noErr )
  75.         text[0] = MIN( 255, actualSize );
  76.         
  77.     return err;
  78. }
  79.  
  80. //ããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  81. //    Ä SetEditTextText
  82. //ããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  83. //    Sets the text of an edit text control and optionally redraws it.
  84. //
  85. pascal OSStatus
  86. SetEditTextText( ControlHandle control, ConstStr255Param text, Boolean draw )
  87. {
  88.     OSStatus    err;
  89.     
  90.     if ( control == nil )
  91.         return paramErr;
  92.  
  93.     err = SetControlData( control, 0, kControlEditTextTextTag, text[0], (Ptr)(text+1) );
  94.     if ( (err == noErr) && draw )
  95.         DrawOneControl( control );
  96.     
  97.     return err;
  98. }
  99.  
  100. //ããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  101. //    Ä SetEditTextKeyFilter
  102. //ããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  103. //    Sets the text of an edit text control and optionally redraws it.
  104. //
  105. pascal OSStatus
  106. SetEditTextKeyFilter( ControlHandle control, ControlKeyFilterUPP filter )
  107. {
  108.     OSStatus    err;
  109.     
  110.     if ( control == nil )
  111.         return paramErr;
  112.         
  113.     if ( filter == nil )
  114.         return paramErr;
  115.  
  116.     err = SetControlData( control, 0, kControlKeyFilterTag, sizeof( filter ),
  117.             (Ptr)&filter );
  118.     
  119.     return err;
  120. }
  121.  
  122. //ããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  123. //    Ä SetEditTextSelection
  124. //ããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  125. //    Sets the selection of an edit text control and redraws it.
  126. //
  127. pascal OSStatus
  128. SetEditTextSelection( ControlHandle control, SInt16 selStart, SInt16 selEnd )
  129. {
  130.     ControlEditTextSelectionRec    selection;
  131.     OSStatus    err;
  132.  
  133.     if ( control == nil )
  134.         return paramErr;
  135.         
  136.     selection.selStart = selStart;
  137.     selection.selEnd = selEnd;
  138.     
  139.     err = SetControlData( control, 0, kControlEditTextSelectionTag,
  140.             sizeof( selection ), (Ptr)&selection );
  141.     
  142.     if ( err == noErr )
  143.         DrawOneControl( control );
  144.     
  145.     return err;
  146. }
  147.  
  148. //ããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  149. //    Ä GetEditTextSelection
  150. //ããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  151. //    Returns the selection for an edit text control.
  152. //
  153. pascal OSStatus
  154. GetEditTextSelection( ControlHandle control, SInt16* selStart, SInt16* selEnd )
  155. {
  156.     ControlEditTextSelectionRec    selection;
  157.     Size        actualSize;
  158.     OSStatus    err;
  159.     
  160.     if ( control == nil )
  161.         return paramErr;
  162.         
  163.     if ( selStart == nil )
  164.         return paramErr;
  165.         
  166.     if ( selEnd == nil )
  167.         return paramErr;
  168.         
  169.     err = GetControlData( control, 0, kControlEditTextSelectionTag,
  170.             sizeof( selection ), (Ptr)&selection, &actualSize );
  171.          
  172.     if ( err == noErr )
  173.     {
  174.         *selStart = selection.selStart;
  175.         *selEnd = selection.selEnd;
  176.     }
  177.         
  178.     return err;
  179. }
  180.  
  181. //ããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  182. //    Ä GetEditTextPasswordText
  183. //ããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  184. //    Returns the password text for an edit text password control.
  185. //
  186. pascal OSStatus
  187. GetEditTextPasswordText( ControlHandle control, StringPtr text )
  188. {
  189.     Size        actualSize;
  190.     OSStatus    err;
  191.     
  192.     if ( control == nil )
  193.         return paramErr;
  194.         
  195.     if ( text == nil )
  196.         return paramErr;
  197.  
  198.     err = GetControlData( control, 0, kControlEditTextPasswordTag,
  199.             255, (Ptr)(text+1), &actualSize );
  200.          
  201.     if ( err == noErr )
  202.         text[0] = MIN( 255, actualSize );
  203.         
  204.     return err;
  205. }
  206.  
  207. //ããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  208. //    Ä GetStaticTextText
  209. //ããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  210. //    Returns the text from an edit text control.
  211. //
  212. pascal OSStatus
  213. GetStaticTextText( ControlHandle control, StringPtr text )
  214. {
  215.     Size        actualSize;
  216.     OSStatus    err;
  217.     
  218.     if ( control == nil )
  219.         return paramErr;
  220.         
  221.     if ( text == nil )
  222.         return paramErr;
  223.         
  224.     err = GetControlData( control, 0, kControlStaticTextTextTag, 255, (Ptr)(text + 1), &actualSize );
  225.     if ( err == noErr )
  226.         text[0] = MIN( 255, actualSize );
  227.         
  228.     return err;
  229. }
  230.  
  231. //ããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  232. //    Ä SetStaticTextText
  233. //ããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  234. //    Sets the text of an edit text control and optionally redraws it.
  235. //
  236. pascal OSStatus
  237. SetStaticTextText( ControlHandle control, ConstStr255Param text, Boolean draw )
  238. {
  239.     OSStatus    err;
  240.     
  241.     if ( control == nil )
  242.         return paramErr;
  243.  
  244.     err = SetControlData( control, 0, kControlStaticTextTextTag, text[0], (Ptr)(text+1) );
  245.     if ( (err == noErr) && draw )
  246.         DrawOneControl( control );
  247.     
  248.     return err;
  249. }
  250.  
  251. //ããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  252. //    Ä GetStaticTextTextHeight
  253. //ããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  254. //    Returns the actual height of the text, not the control height.
  255. //
  256. pascal OSStatus
  257. GetStaticTextTextHeight( ControlHandle control, SInt16* height )
  258. {
  259.     Size        actualSize;
  260.     OSStatus    err;
  261.     
  262.     if ( control == nil )
  263.         return paramErr;
  264.         
  265.     if ( height == nil )
  266.         return paramErr;
  267.         
  268.     err = GetControlData( control, 0, kControlStaticTextTextHeightTag, sizeof( SInt16 ),
  269.          (Ptr)height, &actualSize );
  270.         
  271.     return err;
  272. }
  273.  
  274. //ããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  275. //    Ä SetProgressIndicatorState
  276. //ããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  277. //    Sets a progress bar to the determinate or indeterminate state.
  278. //
  279. pascal OSStatus
  280. SetProgressIndicatorState( ControlHandle control, Boolean isDeterminate )
  281. {
  282.     OSStatus    err;
  283.     Boolean        state;
  284.     
  285.     if ( control == nil )
  286.         return paramErr;
  287.  
  288.     state = !isDeterminate;    
  289.     err = SetControlData( control, 0, kControlProgressBarIndeterminateTag, sizeof( state ),
  290.             (Ptr)&state );
  291.     
  292.     return err;
  293. }
  294.  
  295. //ããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  296. //    Ä GetProgressIndicatorState
  297. //ããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  298. //    Returns the state of the button's default status.
  299. //
  300. pascal OSStatus
  301. GetProgressIndicatorState( ControlHandle control, Boolean* isDeterminate )
  302. {
  303.     Size        actualSize;
  304.     OSStatus    err;
  305.     Boolean        temp;
  306.     
  307.     if ( control == nil )
  308.         return paramErr;
  309.         
  310.     if ( isDeterminate == nil )
  311.         return paramErr;
  312.         
  313.     err = GetControlData( control, 0, kControlListBoxListHandleTag, sizeof( temp ),
  314.              (Ptr)&temp, &actualSize );
  315.     
  316.     if ( err == noErr )
  317.         *isDeterminate = !temp;
  318.         
  319.     return err;
  320. }
  321.  
  322. //ããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  323. //    Ä SetPushButtonDefaultState
  324. //ããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  325. //    Sets a push button's default flag. This lets the button know whether or not
  326. //    to draw its default ring.
  327. //
  328. pascal OSStatus
  329. SetPushButtonDefaultState( ControlHandle control, Boolean isDefault )
  330. {
  331.     OSStatus    err;
  332.     
  333.     if ( control == nil )
  334.         return paramErr;
  335.  
  336.     err = SetControlData( control, 0, kControlPushButtonDefaultTag, sizeof( isDefault ),
  337.             (Ptr)&isDefault );
  338.     
  339.     return err;
  340. }
  341.  
  342. //ããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  343. //    Ä GetPushButtonDefaultState
  344. //ããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  345. //    Returns the state of the button's default status.
  346. //
  347. pascal OSStatus
  348. GetPushButtonDefaultState( ControlHandle control, Boolean* isDefault )
  349. {
  350.     Size        actualSize;
  351.     OSStatus    err;
  352.     
  353.     if ( control == nil )
  354.         return paramErr;
  355.         
  356.     if ( isDefault == nil )
  357.         return paramErr;
  358.         
  359.     err = GetControlData( control, 0, kControlListBoxListHandleTag, sizeof( Boolean ),
  360.              (Ptr)isDefault, &actualSize );
  361.         
  362.     return err;
  363. }
  364.  
  365. //ããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  366. //    Ä GetListBoxListHandle
  367. //ããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  368. //    Returns the list handle from a list box control.
  369. //
  370. pascal OSStatus
  371. GetListBoxListHandle( ControlHandle control, ListHandle* list )
  372. {
  373.     Size        actualSize;
  374.     OSStatus    err;
  375.     
  376.     if ( control == nil )
  377.         return paramErr;
  378.         
  379.     if ( list == nil )
  380.         return paramErr;
  381.         
  382.     err = GetControlData( control, 0, kControlListBoxListHandleTag, sizeof( ListHandle ),
  383.              (Ptr)list, &actualSize );
  384.         
  385.     return err;
  386. }
  387.  
  388. //ããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  389. //    Ä SetListBoxKeyFilter
  390. //ããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  391. //    Sets the key filter for a list box control.
  392. //
  393. pascal OSStatus
  394. SetListBoxKeyFilter( ControlHandle control, ControlKeyFilterUPP filter )
  395. {
  396.     OSStatus    err;
  397.     
  398.     if ( control == nil )
  399.         return paramErr;
  400.     
  401.     if ( filter == nil )
  402.         return paramErr;
  403.  
  404.     err = SetControlData( control, 0, kControlKeyFilterTag, sizeof( filter ),
  405.             (Ptr)&filter );
  406.     
  407.     return err;
  408. }
  409.  
  410. //ããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  411. //    Ä SetIconControlTransform
  412. //ããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  413. //    Sets the transform for an icon control.
  414. //
  415. pascal OSStatus
  416. SetIconControlTransform( ControlHandle control, IconTransformType transform )
  417. {
  418.     OSStatus    err;
  419.     
  420.     if ( control == nil )
  421.         return paramErr;
  422.     
  423.     err = SetControlData( control, 0, kControlIconTransformTag, sizeof( transform ),
  424.             (Ptr)&transform );
  425.     
  426.     return err;
  427. }
  428.  
  429. //ããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  430. //    Ä SetIconControlAlignment
  431. //ããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  432. //    Sets the alignment for an icon control.
  433. //
  434. pascal OSStatus
  435. SetIconControlAlignment( ControlHandle control, IconAlignmentType align )
  436. {
  437.     OSStatus    err;
  438.     
  439.     if ( control == nil )
  440.         return paramErr;
  441.     
  442.     err = SetControlData( control, 0, kControlIconAlignmentTag, sizeof( align ),
  443.             (Ptr)&align );
  444.     
  445.     return err;
  446. }
  447.  
  448. //ããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  449. //    Ä SetClockDateTime
  450. //ããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  451. //    Sets the time for a clock control.
  452. //
  453. pascal OSStatus
  454. SetClockDateTime( ControlHandle control, const LongDateRec* time )
  455. {
  456.     OSStatus    err;
  457.     
  458.     if ( control == nil )
  459.         return paramErr;
  460.     
  461.     err = SetControlData( control, 0, kControlClockLongDateTag,
  462.             sizeof( LongDateRec ), (Ptr)time );
  463.     
  464.     return err;
  465. }
  466.  
  467. //ããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  468. //    Ä GetClockDateTime
  469. //ããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  470. //    Returns the time from a clock control.
  471. //
  472. pascal OSStatus
  473. GetClockDateTime( ControlHandle control, LongDateRec* time )
  474. {
  475.     Size        actualSize;
  476.     OSStatus    err;
  477.     
  478.     if ( control == nil )
  479.         return paramErr;
  480.         
  481.     if ( time == nil )
  482.         return paramErr;
  483.         
  484.     err = GetControlData( control, 0, kControlClockLongDateTag,
  485.             sizeof( LongDateRec ), (Ptr)time, &actualSize );
  486.         
  487.     return err;
  488. }
  489. #if 0
  490. //ãããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  491. //
  492. // Ä BEVEL BUTTON ROUTINES
  493. //
  494. //ãããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  495.  
  496. //=========================================================================================
  497. //    Ä GetBevelButtonMenuValue                                                        PUBLIC
  498. //=========================================================================================
  499. //    Returns the current menuValue of the bevel button, if any. If the bevel button supports
  500. //    multivalued menus, it will return the last one chosen.
  501. //
  502. pascal OSErr
  503. GetBevelButtonMenuValue( ControlRef button, SInt16* value )
  504. {
  505.     OSErr        err;
  506.     
  507.     ASSERT_GOTO( button != nil, noButton );
  508.  
  509.     err = GetControlData( button, 0, kControlBevelButtonMenuValueTag, sizeof( SInt16 ),
  510.                         (Ptr)value, nil );
  511.     
  512.     return err;
  513.  
  514. noButton:
  515.     return paramErr;
  516. }
  517.  
  518. //=========================================================================================
  519. //    Ä SetBevelButtonMenuValue                                                        PUBLIC
  520. //=========================================================================================
  521. //    Sets the current value of the menu.
  522. //
  523. pascal OSErr
  524. SetBevelButtonMenuValue( ControlRef button, SInt16 value )
  525. {
  526.     OSErr        err;
  527.     
  528.     ASSERT_GOTO( button != nil, noButton );
  529.  
  530.     err = SetControlData( button, 0, kControlBevelButtonMenuValueTag, sizeof( SInt16 ),
  531.                         (Ptr)&value );
  532.     
  533.     return err;
  534.  
  535. noButton:
  536.     return paramErr;
  537. }
  538.  
  539. //=========================================================================================
  540. //    Ä GetBevelButtonMenuHandle                                                        PUBLIC
  541. //=========================================================================================
  542. //    Returns the current menuHandle of the bevel button, if any.
  543. //
  544. pascal OSErr
  545. GetBevelButtonMenuHandle( ControlRef button, MenuHandle* handle )
  546. {
  547.     OSErr        err;
  548.     
  549.     ASSERT_GOTO( button != nil, noButton );
  550.  
  551.     err = GetControlData( button, 0, kControlBevelButtonMenuHandleTag, sizeof( MenuHandle ),
  552.                         (Ptr)handle, nil );
  553.     
  554.     return err;
  555.  
  556. noButton:
  557.     return paramErr;
  558. }
  559.  
  560. //=========================================================================================
  561. //    Ä GetBevelButtonContentInfo                                                    PUBLIC
  562. //=========================================================================================
  563. //    Returns the current type of data we are displaying and the handle to that data.
  564. //
  565. pascal OSErr
  566. GetBevelButtonContentInfo( ControlRef button, const ControlButtonContentInfoPtr info )
  567. {
  568.     OSErr        err;
  569.     
  570.     ASSERT_GOTO( button != nil, noButton );
  571.  
  572.     err = GetControlData( button, 0, kControlBevelButtonContentTag, sizeof( ControlButtonContentInfo ),
  573.                         (Ptr)info, nil );
  574.     
  575.     return err;
  576.  
  577. noButton:
  578.     return paramErr;
  579. }
  580.  
  581. //=========================================================================================
  582. //    Ä SetBevelButtonContentInfo                                                    PUBLIC
  583. //=========================================================================================
  584. //    Sets the current content type and data for the button's content. If the current content
  585. //    was created by the button (i.e. resource based) it is disposed.
  586. //
  587. pascal OSErr
  588. SetBevelButtonContentInfo( ControlRef button, ControlButtonContentInfoPtr info )
  589. {
  590.     OSErr        err;
  591.     
  592.     ASSERT_GOTO( button != nil, noButton );
  593.  
  594.     err = SetControlData( button, 0, kControlBevelButtonContentTag, sizeof( ControlButtonContentInfo ),
  595.                 (Ptr)info );
  596.  
  597.     return err;
  598.     
  599. noButton:
  600.     return paramErr;
  601. }
  602.  
  603. //=========================================================================================
  604. //    Ä SetBevelButtonTransform                                                        PUBLIC
  605. //=========================================================================================
  606. //    Sets the transform that will be OR'ed into the calculated transform for the icon. This
  607. //    can be used to add a label color or an offline attribute, etc.
  608. //
  609. pascal OSErr
  610. SetBevelButtonTransform( ControlRef button, IconTransformType transform )
  611. {
  612.     OSErr        err;
  613.     
  614.     ASSERT_GOTO( button != nil, noButton );
  615.  
  616.     err = SetControlData( button, 0, kControlBevelButtonTransformTag, sizeof( transform ), (Ptr)&transform );
  617.  
  618.     return err;
  619.     
  620. noButton:
  621.     return paramErr;
  622. }
  623.  
  624. //=========================================================================================
  625. //    Ä SetBevelButtonTextOptions                                                        PUBLIC
  626. //=========================================================================================
  627. //    Sets the current text options.
  628. //
  629. pascal OSErr
  630. SetBevelButtonTextAlignment( ControlRef button, ControlButtonTextAlignment align, SInt16 hOffset )
  631. {
  632.     OSErr        err;
  633.     
  634.     ASSERT_GOTO( button != nil, noButton );
  635.  
  636.     err = SetControlData( button, 0, kControlBevelButtonTextAlignTag, sizeof( ControlButtonTextAlignment ),
  637.                         (Ptr)&align );
  638.  
  639.     if ( err == noErr )
  640.     {
  641.         err = SetControlData( button, 0, kControlBevelButtonTextOffsetTag, sizeof( SInt16 ),
  642.                         (Ptr)&hOffset );
  643.     }
  644.     return err;
  645.     
  646. noButton:
  647.     return paramErr;
  648. }
  649.  
  650. //=========================================================================================
  651. //    Ä SetBevelButtonGraphicAlignment                                                PUBLIC
  652. //=========================================================================================
  653. //    Sets the aligment options for the button graphic.
  654. //
  655. pascal OSErr
  656. SetBevelButtonGraphicAlignment( ControlRef button, ControlButtonGraphicAlignment align, SInt16 hOffset, SInt16 vOffset )
  657. {
  658.     OSErr        err;
  659.     Point        offset;
  660.     
  661.     ASSERT_GOTO( button != nil, noButton );
  662.  
  663.     ASSERT_ALIGNMENT( align );
  664.  
  665.     
  666.     ASSERT( hOffset >= 0 );
  667.     ASSERT( vOffset >= 0 );
  668.     
  669.     err = SetControlData( button, 0, kControlBevelButtonGraphicAlignTag, sizeof( ControlButtonGraphicAlignment ),
  670.                         (Ptr)&align );
  671.  
  672.     if ( err == noErr )
  673.     {
  674.         offset.h = hOffset;
  675.         offset.v = vOffset;
  676.         
  677.         err = SetControlData( button, 0, kControlBevelButtonGraphicOffsetTag, sizeof( Point ),
  678.                         (Ptr)&offset );
  679.     }
  680.  
  681.     return err;
  682.     
  683. noButton:
  684.     return paramErr;
  685. }
  686.  
  687. //=========================================================================================
  688. //    Ä SetBevelButtonTextPlacement                                                    PUBLIC
  689. //=========================================================================================
  690. //    Sets the text placement for buttons with a combination of text and a graphic. This
  691. //    routine also sets the alignment to the proper alignment based on the current graphic
  692. //    alignment.
  693. //
  694. pascal OSErr
  695. SetBevelButtonTextPlacement( ControlRef button, ControlButtonTextPlacement where )
  696. {
  697.     OSErr        err;
  698.     
  699.     ASSERT_GOTO( button != nil, noButton );
  700.  
  701.     err = SetControlData( button, 0, kControlBevelButtonTextPlaceTag, sizeof( ControlButtonTextPlacement ),
  702.                 (Ptr)&where );
  703.  
  704.     return err;
  705.     
  706. noButton:
  707.     return paramErr;
  708. }
  709.  
  710. //=========================================================================================
  711. //    Ä GetImageWellContentInfo                                                        PUBLIC
  712. //=========================================================================================
  713. //    Returns the current type of data we are displaying and the handle to that data.
  714. //
  715. pascal OSErr
  716. GetImageWellContentInfo( ControlRef button, const ControlButtonContentInfoPtr info )
  717. {
  718.     OSErr        err;
  719.     
  720.     ASSERT_GOTO( button != nil, noButton );
  721.  
  722.     err = GetControlData( button, 0, kControlImageWellContentTag, sizeof( ControlButtonContentInfo ),
  723.                         (Ptr)info, nil );
  724.     
  725.     return err;
  726.  
  727. noButton:
  728.     return paramErr;
  729. }
  730.  
  731. //=========================================================================================
  732. //    Ä SetImageWellContentInfo                                                        PUBLIC
  733. //=========================================================================================
  734. //    Sets the current content type and data for the button's content. If the current content
  735. //    was created by the button (i.e. resource based) it is disposed.
  736. //
  737. pascal OSErr
  738. SetImageWellContentInfo( ControlRef button, ControlButtonContentInfoPtr info )
  739. {
  740.     OSErr        err;
  741.     
  742.     ASSERT_GOTO( button != nil, noButton );
  743.  
  744.     err = SetControlData( button, 0, kControlImageWellContentTag, sizeof( ControlButtonContentInfo ), (Ptr)info );
  745.  
  746.     return err;
  747.     
  748. noButton:
  749.     return paramErr;
  750. }
  751.  
  752. //=========================================================================================
  753. //    Ä SetImageWellTransform                                                            PUBLIC
  754. //=========================================================================================
  755. //    Sets the transform that will be OR'ed into the calculated transform for the icon. This
  756. //    can be used to add a label color or an offline attribute, etc.
  757. //
  758. pascal OSErr
  759. SetImageWellTransform( ControlRef button, IconTransformType transform )
  760. {
  761.     OSErr        err;
  762.     
  763.     ASSERT_GOTO( button != nil, noButton );
  764.  
  765.     err = SetControlData( button, 0, kControlImageWellTransformTag, sizeof( transform ), (Ptr)&transform );
  766.  
  767.     return err;
  768.     
  769. noButton:
  770.     return paramErr;
  771. }
  772.  
  773. //=========================================================================================
  774. //    Ä GetTabContentRect                                                                PUBLIC
  775. //=========================================================================================
  776. //    Gets the content area of a tab control.
  777. //
  778. pascal OSErr
  779. GetTabContentRect( ControlRef tabControl, Rect* contentRect )
  780. {
  781.     OSErr        err;
  782.     
  783.     ASSERT_GOTO( tabControl != nil, noButton );
  784.  
  785.     err = GetControlData( tabControl, 0, kControlTabContentRectTag, sizeof( Rect ),
  786.                         (Ptr)contentRect, nil );
  787.     
  788.     return err;
  789.  
  790. noButton:
  791.     return paramErr;
  792. }
  793.  
  794. //=========================================================================================
  795. //    Ä SetTabEnabled                                                                    PUBLIC
  796. //=========================================================================================
  797. //    Sets the hilite flag of a particular tab of a tab control.
  798. //
  799. pascal OSErr
  800. SetTabEnabled( ControlRef tabControl, SInt16 tabToHilite, Boolean enabled )
  801. {
  802.     OSErr        err;
  803.     
  804.     ASSERT_GOTO( tabControl != nil, noButton );
  805.  
  806.     err = SetControlData( tabControl, tabToHilite, kControlTabEnabledFlagTag, sizeof( Boolean ),
  807.                         (Ptr)&enabled );
  808.     
  809.     return err;
  810.  
  811. noButton:
  812.     return paramErr;
  813. }
  814.  
  815. //=========================================================================================
  816. //    Ä SetDisclosureTriangleLastValue                                                PUBLIC
  817. //=========================================================================================
  818. //    Sets the 'last value' field of a disclosure triangle. This is useful.
  819. //
  820. pascal OSErr
  821. SetDisclosureTriangleLastValue( ControlRef triangle, SInt16 value )
  822. {
  823.     OSErr        err;
  824.     
  825.     ASSERT_GOTO( triangle != nil, noButton );
  826.  
  827.     err = SetControlData( triangle, 0, kControlTriangleLastValueTag, sizeof( SInt16 ), (Ptr)&value );
  828.     
  829.     return err;
  830.  
  831. noButton:
  832.     return paramErr;
  833. }
  834.  
  835. #endif